package com.sparkseries.controller;

import com.sparkseries.domain.vo.SysDepartmentVO;
import com.sparkseries.dto.SysDepartmentDTO;
import com.sparkseries.service.SysDepartmentService;
import com.sparkseries.common.util.domain.Result;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;


/**
 * 部门管理控制器
 */
@RestController
@RequestMapping("/depart")
public class SysDepartmentController {

    @Resource
    private SysDepartmentService service;

    /**
     * 创建部门
     *
     * @param sysDepartmentsDTO 需要创建的部门列表
     * @return 创建结果
     */
    @PostMapping("/add")
    public Result<?> addDeparts(@RequestBody ArrayList<SysDepartmentDTO> sysDepartmentsDTO){
        return service.createDepartments(sysDepartmentsDTO);
    }

    /**
     * 获取所有部门
     *
     * @return 部门列表
     */
    @GetMapping("/getAll")
    public Result<List<SysDepartmentVO>> getAllDepart(){

        return service.getAllDepart();
    }

    /**
     * 删除部门
     *
     * @param ids 需要删除的部门ID列表
     * @return 删除结果
     */
    @DeleteMapping("/delete")
    public Result<?> deleteDepart(@RequestBody ArrayList<Integer> ids){
        return service.deleteDepart(ids);
    }

    /**
     * 修改部门
     *
     * @param sysDepartmentDTO 需要修改的部门信息
     * @return 修改结果
     */
    @PutMapping("/update")
    public Result<?> updateDepart(@RequestBody SysDepartmentDTO sysDepartmentDTO){
        return service.updateDepart(sysDepartmentDTO);
    }

    /**
     * 通过id获取部门
     *
     * @param id 部门ID
     * @return 部门信息
     */
    @GetMapping("{id}")
    public Result<SysDepartmentVO> getDepartById(@PathVariable("id")Integer id){
        return service.getDepartById(id);
    }

    /**
     * 获取指定部门的直接下级部门
     *
     * @param id 部门ID
     * @return 下级部门列表
     */
    @GetMapping("/getChild/{id}")
    public Result<List<SysDepartmentVO>> getDirectChildren(@PathVariable("id") Integer id){
        return service.getDirectChildren(id);
    }

    /**
     * 根据条件查询部门信息
     *
     * @param sysDepartment 包含查询条件的部门对象
     * @return 查询结果，包括符合条件的部门信息
     */
    @GetMapping("/find")
    public Result<List<SysDepartmentVO>> findDepartmentByCondition(@RequestBody SysDepartmentDTO sysDepartment){
        return service.findDepartmentByCondition(sysDepartment);
    }
}

